/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package drt;

import evaluation.Graph;
import java.util.LinkedHashSet;
import java.util.Map;
import logic.Type;

/**
 *
 * @author phong
 */
public interface DrtExpression {
    
    public void setType(Type t);

    Type getType();
    
    /*
     * no need alpha-convertion because each var/ref has a unique name
     */
    public DrtExpression replace(DrtVariable var, DrtExpression exp);
    
    public DrtExpression simplify();
    
    public void getRefs(LinkedHashSet<DRSReferent> refs);
    
    public void getAllVariables(LinkedHashSet<DrtVariable> vars);
    
    public Graph toGraph();
    
    public DrtExpression getTemplate(Map<String,String> map);
}
